package models.dao;

import java.sql.*;
import java.util.LinkedList;
import java.util.List;

import models.entity.Detalleventa;
import utilidades.DataBaseInstance;

public class DetalleventaDao {
    
    protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }
    
    public List<Detalleventa> findById(int ventaId) {      
        List<Detalleventa> listaDetalle = new LinkedList<Detalleventa>();
        ResultSet result = null;
        try {
             
            String query = "SELECT * FROM detalleventa";

            PreparedStatement stmt = getConnection().prepareStatement(query);
            stmt.setInt(1, ventaId);
            result = stmt.executeQuery();
            
            while (result.next()) {
            Detalleventa detalle = new Detalleventa();
            detalle.setVenta_codigo(result.getInt("venta_Codigo"));
            detalle.setDetventa_item(result.getInt("detventa_Item"));
            detalle.setId(result.getInt("producto_Codigo"));
            detalle.setDetventa_subtotal(result.getInt("detventa_Subtotal"));
            detalle.setDetventa_cantidad(result.getInt("detventa_Cantidad"));
            listaDetalle.add(detalle);
            }

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return listaDetalle;
    }

    public void save(Detalleventa detalle, int producto_codigo) {
        PreparedStatement saveDetalle;
        try {
                saveDetalle = getConnection().prepareStatement(
                        "INSERT INTO detalleventa (venta_codigo, detventa_item, producto_codigo, detventa_cantidad, detventa_subtotal) "
                        + "VALUES (?, ?, ?, ?, ?)");
                saveDetalle.setInt(1, detalle.getVenta_codigo());
                saveDetalle.setInt(2, detalle.getDetventa_item());
                saveDetalle.setInt(3, producto_codigo);
                saveDetalle.setInt(4, detalle.getDetventa_cantidad());
                saveDetalle.setDouble(5, detalle.getDetventa_subtotal());
                System.out.println("INSERT INTO ....");

            saveDetalle.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }
    
    public void delete(Detalleventa detalle) {
        PreparedStatement saveProduct;
        try {

            if (detalle.getVenta_codigo()> 0) {
                saveProduct = getConnection().prepareStatement(
                        "DELETE FROM detalleventa WHERE venta_Codigo = ?");

                saveProduct.setInt(1, detalle.getVenta_codigo());
                saveProduct.executeUpdate();
            }


            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }
    
    protected void closeConnection() {
        DataBaseInstance.closeConnection();
    }
}
